iT邦幫忙

2025 iThome 鐵人賽

DAY 6
0
Mobile Development

從零開始學習 iOS系列 第 6

從零開始學習 iOS Day5 - 進階 Swift

  • 分享至 

  • xImage
  •  

昨天我們介紹了 EnumProtocol

今天要來看看 Swift 中幾個更進階、也更常見的功能:集合型別 (Collection)泛型 (Generics)錯誤處理 (Error Handling)

集合型別 (Collection)

Swift 主要有三種集合型別:Array、Set、Dictionary

Array(陣列,有序)

用來儲存相同型別的資料,並且 保留順序(索引從 0 開始)。

var fruits: [String] = ["蘋果", "香蕉", "櫻桃"]
fruits.append("Durian")
print(fruits[1])   // 香蕉

Set(集合,無序、不重複)

用來儲存 不重複的元素,元素之間沒有順序。

var numbers: Set<Int> = [1, 2, 3, 3, 2]
print(numbers)  // {1, 2, 3}

Dictionary(字典,Key-Value)

用來儲存 Key-Value 對應關係,可以快速透過 key 查找 value。

var scores: [String: Int] = ["Tom": 80, "Mary": 95]
scores["Jerry"] = 70
print(scores["Mary"]!)  // 95

高階函式

集合支援許多「高階函式」,能大幅減少程式碼量,以下為常用的幾個。

  • map:將每個元素轉換成新的值
  • filter:篩選出符合條件的元素
  • reduce:將所有元素合併成一個結果

範例:

let numbers = [1, 2, 3, 4, 5]

// map:每個數字平方
let squared = numbers.map { $0 * $0 } // [1, 4, 9, 16, 25]

// filter:挑出偶數
let evens = numbers.filter { $0 % 2 == 0 } // [2, 4]

// reduce:加總所有數字
let sum = numbers.reduce(0) { $0 + $1 } // 15

這些工具讓 Swift 的程式碼更簡潔、直觀。


泛型 (Generics)

泛型讓程式碼更通用,可以避免重複撰寫同樣邏輯的函式或型別。

單一泛型

func swapValues<T>(_ a: inout T, _ b: inout T) {
    let temp = a
    a = b
    b = temp
}

var x = "Hello"
var y = "World"
swapValues(&x, &y)  // x = World, y = Hello

多個泛型

如果需要處理兩個不同型別,可以宣告多個泛型參數:

func merge<T, U>(_ a:  T, _ b:  U) -> String {
    return "\(a) \(b) is a string"
    
}

var x = 10
var y = "Month"
print(merge(x, y)) // 10 Month is a string

錯誤處理 (Error Handling)

透過 throw / try / catch 機制來處理錯誤情境。

enum NetworkError: Error {
    case badURL
    case timeout
}

func fetchData(from url: String) throws -> String {
    guard url.starts(with: "https") else {
        throw NetworkError.badURL
    }
    return "OK"
}

do {
    let data = try fetchData(from: "http://test.com")
    print(data)
} catch {
    print("發生錯誤:\(error)")
}

  • throw負則把錯誤往外面拋
  • try 表示後面執行的方法有可能Exception
  • do catch 表示要接收Exception來處理

今日小結

今天我們學到了 Swift 四個進階功能:

  1. 集合型別 (Collection)ArraySetDictionary
  2. 泛型 (Generics) → 寫出通用程式
  3. 錯誤處理 (Error Handling)throw / try / catch 處理錯誤

上一篇
從零開始學習 iOS Day4 - Swift Enum & Protocol
下一篇
從零開始學習 iOS Day6 - Xcode介紹
系列文
從零開始學習 iOS9
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言